gtk-demo: Fix images demo
authorMatthias Clasen <mclasen@redhat.com>
Sun, 13 Apr 2014 03:39:26 +0000 (20:39 -0700)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 13 Apr 2014 03:40:27 +0000 (20:40 -0700)
The incremental loading was broken by GtkIconHelper - queuing a
redraw is no longer sufficient to cause GtkImage to redraw with
the new pixbuf contents.
Pointed out by Jasper St. Pierre.

demos/gtk-demo/images.c

index baa2d497661c0d12eb35b34c4403020c62ca194d..a36c8df2f737942bdbe55ab9b4cb7857b2d7f85b 100644 (file)
@@ -50,18 +50,21 @@ progressive_updated_callback (GdkPixbufLoader *loader,
                               gpointer     data)
 {
   GtkWidget *image;
+  GdkPixbuf *pixbuf;
 
   image = GTK_WIDGET (data);
 
   /* We know the pixbuf inside the GtkImage has changed, but the image
-   * itself doesn't know this; so queue a redraw.  If we wanted to be
-   * really efficient, we could use a drawing area or something
-   * instead of a GtkImage, so we could control the exact position of
-   * the pixbuf on the display, then we could queue a draw for only
-   * the updated area of the image.
+   * itself doesn't know this; so give it a hint by setting the pixbuf
+   * again. Queuing a redraw used to be sufficient, but nowadays GtkImage
+   * uses GtkIconHelper which caches the pixbuf state and will just redraw
+   * from the cache.
    */
 
-  gtk_widget_queue_draw (image);
+  pixbuf = gtk_image_get_pixbuf (GTK_IMAGE (image));
+  g_object_ref (pixbuf);
+  gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf);
+  g_object_unref (pixbuf);
 }
 
 static gint